package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/*
* @Controller：创建处理器对象，对象放在springMvc容器中
* 位置：在类的上面
* 和Spring中讲的@Service,@Component是一样的
*
* */
@Controller
public class MyController {
    /*处理用户提交的请求，springMvc中使用方法来处理的
    * 方法是自定义的，可以有多种返回值，多种参数，方法名称自定义
    *
    *准备使用doSome方法处理some.do请求。
    * @RequestMapping:请求映射，作用是把一个请求地址和一个方法绑定在一起。
    *                 一个请求指定一个方法处理
    *    属性：1.value 是一个String ,表示请求的url地址（some.do）
    *            value的值必须是唯一的，不能重复。在使用时，推荐地址以/开头
    *    位置：1.在方法的上面，常用的
    *         2.在类的上面
    * 说明：使用RequestMapping修饰的方法叫做处理器方法或者控制器方法。
    *       使用@RequestMapping修饰的方法可以处理请求，类似Servlet中的doGet,doPost
    * 返回值：ModelAndView
    *  Model:数据，请求处理完成后，要显示给用户的数据
    *  View:视图，比如jsp等等
    *
    * */
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(){//doGet()---service请求处理
       //处理some.do请求了。相当于service调用处理完成了。
        ModelAndView mv=new ModelAndView();
        //添加数据,框架在请求的最后把数据放入到request作用域
        //request.setAttribute("","");
        mv.addObject("msg","欢迎使用springMvc做web开发");
        mv.addObject("fun","执行的是doSome方法");
        //指定视图，指定视图的完整路径
        //框架对视图指定的forward操作,request.getRequestDispatcher("/show.jsp").forward(...)
        //当配置了视图解析器后，可以使用逻辑名称（文件名）指定视图
        mv.setViewName("show.jsp");
        //返回mv
        return mv;
    }
    /*
     * @RequestMapping:请求映射
     *          属性：method,表示请求的方式。它的值RequestMethod类枚举值
     *               例如表示get请求方式，RequestMethod.GET
     *                      post方式，RequestMethod.POST
     *
     * */
    @RequestMapping(value = "/other.do",method = RequestMethod.GET)
    public ModelAndView doOther(){//doGet()---service请求处理
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg","欢迎使用springMvc做web开发");
        mv.addObject("fun","执行的是doOther方法");
        mv.setViewName("show.jsp");
        return mv;
    }
    @RequestMapping(value = "/otherByPost.do",method = RequestMethod.POST)
    public ModelAndView doOtherByPost(HttpServletRequest request,
                                      HttpServletResponse response,
                                      HttpSession session){
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg","欢迎使用springMvc做web开发"+request.getParameter("name"));
        mv.addObject("fun","执行的是doOtherbyPost方法");
        mv.setViewName("show.jsp");
        return mv;
    }
}
